#include <stdio.h>
#include <string.h>
#include "student_manager.h"

// 显示菜单
void print_menu() {
    printf("\n===== 学生管理系统 =====\n");
    printf("1. 添加学生\n");
    printf("2. 查找学生\n");
    printf("3. 修改学生\n");
    printf("4. 删除学生\n");
    printf("5. 显示所有学生\n");
    printf("6. 导出学生数据到文件\n");  // 新增
    printf("7. 从文件导入学生数据\n");  // 新增
    printf("0. 退出系统\n");
    printf("========================\n");
    printf("请输入操作编号: ");
}

int main() {
    // 创建管理器（初始容量为5）
    StudentManager *manager = manager_create(5);
    if (!manager) {
        fprintf(stderr, "初始化失败，程序退出\n");
        return 1;
    }

    int choice = -1;
    while (choice != 0) {
        print_menu();
        scanf("%d", &choice);
        getchar();  // 吸收换行符

        switch (choice) {
            case 1: {  // 添加学生
                char name[100];
                int id;
                float score;

                printf("请输入姓名: ");
                fgets(name, sizeof(name), stdin);
                name[strcspn(name, "\n")] = '\0';  // 去除换行符

                printf("请输入学号: ");
                scanf("%d", &id);

                printf("请输入分数: ");
                scanf("%f", &score);

                Student *student = student_create(name, id, score);
                if (manager_add_student(manager, student)) {
                    printf("添加成功!\n");
                } else {
                    printf("添加失败!\n");
                    student_destroy(student);  // 添加失败时手动释放
                }
                break;
            }

            case 2: {  // 查找学生
                int id;
                printf("请输入要查找的学号: ");
                scanf("%d", &id);

                Student *student = manager_find_student(manager, id);
                if (student) {
                    printf("找到学生: ");
                    student_print(student);
                } else {
                    printf("未找到学号为 %d 的学生\n", id);
                }
                break;
            }

            case 3: {  // 修改学生
                int id;
                char new_name[100];
                float new_score;

                printf("请输入要修改的学号: ");
                scanf("%d", &id);
                getchar();  // 吸收换行符

                printf("请输入新姓名: ");
                fgets(new_name, sizeof(new_name), stdin);
                new_name[strcspn(new_name, "\n")] = '\0';

                printf("请输入新分数: ");
                scanf("%f", &new_score);

                if (manager_update_student(manager, id, new_name, new_score)) {
                    printf("修改成功!\n");
                } else {
                    printf("修改失败（未找到学号）\n");
                }
                break;
            }

            case 4: {  // 删除学生
                int id;
                printf("请输入要删除的学号: ");
                scanf("%d", &id);

                if (manager_remove_student(manager, id)) {
                    printf("删除成功!\n");
                } else {
                    printf("删除失败（未找到学号）\n");
                }
                break;
            }

            case 5: {  // 显示所有学生
                printf("\n===== 所有学生列表 =====\n");
                if (manager_get_count(manager) == 0) {
                    printf("暂无学生信息\n");
                } else {
                    manager_for_each(manager, student_print);
                }
                printf("========================\n");
                break;
            }

            case 6: {  // 新增：导出数据
                char filename[200];
                printf("请输入导出文件名（例如 students.txt）: ");
                fgets(filename, sizeof(filename), stdin);
                filename[strcspn(filename, "\n")] = '\0';

                if (manager_export_to_file(manager, filename)) {
                    printf("成功导出 %d 条学生数据到 %s\n",
                           manager_get_count(manager), filename);
                } else {
                    printf("导出失败\n");
                }
                break;
            }

            case 7: {  // 新增：导入数据
                char filename[200];
                printf("请输入导入文件名: ");
                fgets(filename, sizeof(filename), stdin);
                filename[strcspn(filename, "\n")] = '\0';

                int imported = manager_import_from_file(manager, filename);
                if (imported > 0) {
                    printf("成功导入 %d 条学生数据，共跳过 %d 条\n",
                           imported, (manager_get_count(manager) - imported));
                } else {
                    printf("导入失败或无新数据\n");
                }
                break;
            }

            case 0:  // 退出
                printf("谢谢使用，再见!\n");
                break;

            default:
                printf("无效操作，请重新输入!\n");
        }
    }

    // 释放所有资源
    manager_destroy(manager);
    return 0;
}